简介
PreferenceFragment , 展示一系列的Preference条目并且当与用户有交互时,产生的值会自动保存到SharedPreferences中,通过PreferenceManager#getDefaultSharedPreferences(android.content.Context)可以查看对应的SharedPreferences的值。展示的Preferences的风格会随着系统而改变,通过XML文件可以快速的创建Preferences,官方推荐使用Fragment来实现这类功能。
创建XML
Tag |
意义 |
PreferenceScreen |
必须作为根节点,代表整个Preferences屏幕 |
PreferenceCategory |
一组Preferences,便于分类 |
SwitchPreference |
两种状态的preference,开关 |
ListPreference |
列表显示Preference, android:entries设置的内容是我们在设置时看到的内容,而android:entryValues就是保存在preferences.xml中的值 |
CheckBoxPreference |
复选框Preference,勾选和不勾选 |
RingtonePreference |
Ringtone选择Preference |
EditTextPreference |
编辑类Preference |
MultiSelectListPreference |
多选类Preference |
常用属性
属性 |
用法 |
android:title |
标题 |
android:defaultValue |
默认值 |
android:key |
SharedPreference中保存值时使用的Key值 |
android:entries |
列表或者多选框的显示内容 |
android:entryValues |
列表或者多选框保存过程中对应的值 |
代码使用
XML文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="无线和网络"> <SwitchPreference android:defaultValue="false" android:title="WLAN" android:key="switch_preference_wlan" /> <SwitchPreference android:defaultValue="false" android:title="蓝牙" android:key="switch_preference_bluetooth" /> <ListPreference android:defaultValue="1" android:title="休眠" android:entries="@array/pref_sleep_interval" android:entryValues="@array/pref_sleep_interval" android:key="list_preference_sleep" /> </PreferenceCategory> <PreferenceCategory android:title="设备" android:persistent="false" android:orderingFromXml="false"> <CheckBoxPreference android:defaultValue="false" android:title="静音" android:key="check_box_preference_virate" /> <RingtonePreference android:defaultValue="" android:title="铃声" android:key="ringtone_preference_ringtone" /> </PreferenceCategory> <PreferenceCategory android:title="隐私和安全"> <EditTextPreference android:defaultValue="Default value" android:selectAllOnFocus="true" android:singleLine="true" android:title="设备名称" android:key="edit_text_preference_devicename" /> <MultiSelectListPreference android:title="辅助功能" android:defaultValue="@array/pref_assit_function" android:entries="@array/pref_assit_function" android:entryValues="@array/pref_assit_function" android:key="multi_select_list_preference_assit" /> </PreferenceCategory> </PreferenceScreen>
|
arrays.xml文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <?xml version="1.0" encoding="utf-8"?> <resources> <array name="pref_sleep_interval"> <item>30秒</item> <item>1分钟</item> <item>2分钟</item> <item>5分钟</item> <item>10分钟</item> <item>30分钟</item> </array>
<array name="pref_assit_function"> <item>灵犀一指</item> <item>指关节截屏</item> <item>通话录音</item> <item>白科技</item> <item>黑科技</item> </array> </resources>
|
自定义PreferenceFragment
PreferenceFragment是抽象类,需要自己实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public class BaseFragment extends PreferenceFragment {
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.prefs); }
@Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { Toast.makeText(getActivity(), preference.toString() + " is Clicked", Toast.LENGTH_LONG).show(); return super.onPreferenceTreeClick(preferenceScreen, preference); } }
|
Activity中使用
1 2 3 4 5
| BaseFragment baseFragment = new BaseFragment(); FragmentManager fm = getFragmentManager(); FragmentTransaction transaction = fm.beginTransaction(); transaction.replace(xxxxxx,baseFragment); transaction.commit();
|
结果
SharedPreference结果<中文乱码是系统问题>